package com.vhall.component.controller.record.facade;

import com.alibaba.fastjson.JSONObject;
import com.vhall.component.entity.audit.vo.AuditRecordResponseVO;
import com.vhall.component.entity.record.RecordEntity;
import com.vhall.component.entity.record.vo.*;
import com.vhall.component.entity.room.vo.RoomConsoleListRespVO;
import com.vhall.component.entity.room.vo.RoomConsoleListVO;
import com.vhall.component.plugin.common.annotation.TokenAuth;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 回放管理
 *
 * @author dongsong
 */
@FeignClient(value = "RecordConsoleFacade", path = "/v4/record/console")
public interface RecordConsoleFacade {

    /**
     * 控制台-房间管理-管理-回放管理-获取回放列表
     *
     * @param reqVo
     * @return
     */
    @GetMapping("/list")
    GetRecordListRspVo list(GetRecordListReqVo reqVo);

    /**
     * 控制台-房间管理-管理-回放管理-设置默认回放
     *
     * @param reqVo
     * @return
     */
    @GetMapping("/set-default")
    List<Object> setDefaultRecord(SetDefaultRecordReqVo reqVo);

    /**
     * 取消默认回放
     * @param roomId
     * @return
     */
    @PostMapping("/cancel/default")
    Boolean cancelDefaultRecord(@RequestParam("room_id") String roomId);

    /**
     * 控制台-房间管理-管理-回放管理-删除回放
     *
     * @param reqVo
     * @return
     */
    @GetMapping("/delete")
    JSONObject delete(DeleteRecordReqVo reqVo);

    /**
     * 功能描述 视频下载
     *
     * @param reqVO
     * @return
     */
    @GetMapping("/down")
    JSONObject downRecord(RecordDownReqVO reqVO);

    /**
     * 功能描述 具有清晰度视频下载
     *
     * @param reqVO
     * @return
     */
    @GetMapping("/down-quality")
    JSONObject downRecordQuality(RecordDownQualityReqVO reqVO);

    /**
     * 功能描述 视频上传-记录保存,只创建记录
     *
     * @param reqVO
     * @return
     */
    @PostMapping("/upload/create")
    Boolean uploadRecord(@Validated CreateRecordReqVO reqVO);

    /**
     * 功能描述 视频裁剪（保存加导出）
     *
     * @param reqVO
     * @return
     */
    @PostMapping("/cut/save-record")
    RecordEntity saveRecord(@Validated CutRecordReqVO reqVO);


    /**
     * 回放列表
     *
     * @param reqVO
     * @return
     */
    @PostMapping("/cut/list")
    JSONObject cutList(@Validated CutListReqVO reqVO);

    /**
     * 生成回放, Console端手动生成
     *
     * @param reqVO
     * @return
     */
    @PostMapping("/cut/merge-record")
    RecordEntity cutMergeRecord(@Validated CutMergeRecordReqVO reqVO);

    /**
     * 功能描述 获取点播详情
     *
     * @param reqVO
     * @return
     */
    @TokenAuth
    @PostMapping("/cut/get-vod-info")
    GetVodInfoRspVO getVodInfo(@Validated GetVodInfoReqVO reqVO);

    /**
     * 控制台-媒资管理-音视频管理-获取回放列表
     *
     * @param reqVo
     * @return
     */
    @TokenAuth
    @GetMapping("/upload/list")
    GetUploadListRspVo uploadList(GetUploadListReqVo reqVo);

    /**
     * 控制台-媒资管理-音视频管理-重命名
     *
     * @param reqVo
     * @return
     */
    @GetMapping("/upload/rename")
    void rename(RenameUploadReqVo reqVo);

    /**
     * 控制台-媒资管理-音视频管理-详情
     *
     * @param reqVo
     * @return
     */
    @GetMapping("/upload/info")
    JSONObject getUploadInfo(GetUploadInfoReqVo reqVo);

    /**
     * 控制台-媒资管理-音视频管理-详情-删除
     *
     * @param reqVo
     * @return
     */
    @GetMapping("/upload/del-video")
    JSONObject deleteVideo(DeleteVideoReqVo reqVo);

    /**
     * 控制台-媒资管理-音视频管理-删除
     *
     * @param reqVo
     * @return
     */
    @GetMapping("/upload/del")
    JSONObject deleteUpload(DeleteUploadReqVo reqVo);

    /**
     * 控制台-回放管理-在线剪辑-获取回放详情
     *
     * @param reqVo
     * @return
     */
    @GetMapping("/cut/detail")
    GetCutDetailRspVo getCutRecordDetail(GetCutDetailReqVo reqVo);

    /**
     * 控制台-房间管理-管理-回放管理-设置任意视频回放
     *
     * @param reqVo
     * @return
     */
    @GetMapping("/set-wilfully")
    List<Object> setWilfullyRecord(SetDefaultRecordReqVo reqVo);

    /**
     * 控制台-房间管理-管理-回放管理-添加回放
     *
     * @param reqVo
     * @return
     */
    @PostMapping("/add")
    Boolean add(@Validated GetRecordListReqVo reqVo);

    /**
     * 审核
     * @param ilId 房间ID
     * @param recordId 回放ID
     * @param auditStatus 审核状态
     * @param description 审核意见描述
     * @return
     */
    @PostMapping("/do-audit")
    boolean auditRecord(@RequestParam("il_id") Integer ilId,
                        @RequestParam("record_id")Integer recordId,
                        @RequestParam("audit_status")Integer auditStatus,
                        @RequestParam("description")String description);

    /**
     * 审核-产品类二次审核
     * @param ilId 房间ID
     * @param recordId 回放ID
     * @param auditStatus 审核状态
     * @param description 审核意见描述
     * @return
     */
    @PostMapping("/do-audit-product")
    boolean auditRecordSecond(@RequestParam("il_id") Integer ilId,
                        @RequestParam("record_id")Integer recordId,
                        @RequestParam("audit_status")Integer auditStatus,
                        @RequestParam("description")String description);

    /**
     * 审核信息
     * @param recordId 回放ID
     * @return
     */
    @GetMapping("/audit-info")
    AuditRecordResponseVO getAuditInfo(@RequestParam("record_id") Integer recordId);

    /**
     * 审核信息-产品类二次审核
     * @param recordId 回放ID
     * @return
     */
    @GetMapping("/audit-info-second")
    AuditRecordResponseVO getAuditInfoSecond(@RequestParam("record_id") Integer recordId);

    /**
     * 回放列表-审核
     * @param reqVo
     * @return
     */
    @GetMapping("/audit-list")
    GetRecordListRspVo auditList(GetRecordListReqVo reqVo);

    /**
     * 回放列表-审核-这个接口给回放二审使用，这里过滤出来一审通过的数据
     * @param reqVo
     * @return
     */
    @GetMapping("/audit-list-second")
    GetRecordListRspVo auditListSecond(GetRecordListReqVo reqVo);
    /**
     * 审核回放 房间列表
     * @param reqVO
     * @return
     */
    @GetMapping("/audit/room-list")
    RoomConsoleListRespVO auditRecordRoomList(@Validated RoomConsoleListVO reqVO);

    /**
     * 章节打点列表
     */
    @TokenAuth
    @GetMapping("/chapter/list")
    RecordChapterListResponseVO getRecordChapterList(@Validated RecordChapterListRequestVO reqVO);
    /**
     * 章节打点-保存章节打点
     * v2.0
     * @param reqVO
     * @return
     */
    @TokenAuth
    @PostMapping("/chapter/save-record")
    SaveRecordChapterManagementResponseVO saveRecordChapterManagement(@Validated SaveRecordChapterManagementRequestVO reqVO);
    /**
     * 修改章节打点状态,开启or 关闭
     * v2.0
     */
    @TokenAuth
    @PostMapping("/chapter/set-point-status")
    SetPointStatusResponseVO setPointStatus(@Validated SetPointStatusRequestVO reqVO);

}
